//
//  HomeController.swift
//  新浪微博项目
//
//  Created by 王炯 on 16/7/19.
//  Copyright © 2016年 王炯. All rights reserved.
//

import UIKit

class HomeController: BaseVistorController
{

    //定义一个ViewModel属性对象，用于接收网络数据信息
    lazy var homeViewModel:HomeViewModel = HomeViewModel()
    
    
    //懒加载菊花上拉控件和系统下拉控件
    //1-菊花控件
    private lazy var indicatorView:UIActivityIndicatorView = {
       
        
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        
        //设置菊花颜色
        indicator.color = THEMEColor
        
        return indicator
        
    }()
    
    //2-系统下拉刷新控件
    private lazy var refreshControl:MyRefreshControl = MyRefreshControl()
    
   
    //3-请求数据刷新Label,在下拉刷新控件的下面，显示有多少新数据被刷新掉
    private lazy var newWeiboLabel:UILabel = {
        
        
        let lab = UILabel(textColor: UIColor.whiteColor(), textFont: 12)
        lab.frame = CGRect(x: 0, y: 64 - 30, width: SCREENW, height: 30)
        lab.textAlignment = .Center
        lab.backgroundColor = THEMEColor
        
        //默认隐藏掉label，下拉刷新之后在显示出来
        lab.hidden = true
        return lab
    }()
    
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
        //判断是否处于未登录状态
        if !isLogin
        {
            self.vistorView?.setUpUIWithVCInfo(nil, wordStr: nil)
            
            return
        }
        
        //当已经处于登录转态的时候，此时的界面已经成为了一个tabelView
        //继承的父类BaseVistorController中已经定义了一个懒加载控件tabelView
        setUpTableView()
        
        //初始时开始获取数据
        GetHomeData()
        
    }

    
    //重新设置继承自父类的tableView
    func setUpTableView()
    {
        
        //将请求刷新Label Insert到navigationController的下面
        self.navigationController!.view.insertSubview(self.newWeiboLabel, belowSubview: navigationController!.navigationBar)
        
        
        //(1)设置tableView
        tableView.dataSource = self
        
        tableView.delegate = self
        
        
        //注册cell
        tableView.registerClass(HomeCell.self, forCellReuseIdentifier: "homeCell")
        
        //tableView.rowHeight = 275
        //cell的高度随着约束而改变，所以先设置cell的预计高度(必须要加)
        tableView.estimatedRowHeight = 275
        
        //设置去掉tableView中的cell线
        tableView.separatorStyle = .None
        
        
        //(2)设置菊花
        //设置菊花为tableView的footerView
        tableView.tableFooterView = self.indicatorView
        
        //(3)设置系统下拉刷新控件
        //添加系统下拉刷新控件
        self.view.addSubview(self.refreshControl)
        //添加下拉刷新控件的下拉触发事件(使用valueChanged)
        self.refreshControl.addTarget(self, action: #selector(HomeController.refreshAction), forControlEvents: UIControlEvents.ValueChanged)
        
    }
    
    //下拉刷新控件的触发事件
    func refreshAction()
    {
        //重新从网络上获取相关数据
        GetHomeData()
    }
    
    
    
    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
    
}


//从网络获取信息(并获取是否成功)
extension HomeController
{
    func GetHomeData()
    {
        
        //传入一个BOOL参数，用来记录当前是上拉刷新还是下拉刷新
        //将上拉控件的运动状态作为参数传入:true:上拉刷新，false:下拉刷新
        self.homeViewModel.GetHomeData (indicatorView.isAnimating()){(isSucc, count) in
            
            //获取数据之后无论失败或成功，都要停止各种动画
            self.endRefreshing()
            
            //获取信息失败
            if !isSucc
            {
                //print("从ViewModel获取信息失败")
                
                return
            }
            
            //查看获取的网络数据的数量
            if count != -1
            {
                //下拉刷新
                
                //将count数据赋值给newWeiboLabel
                self.setUpnewWeiboLabel(count)
            }
            
            
            //刷新tableView
            self.tableView.reloadData()
        }
    }
    
    //根据新产生的微博数量来设置newWeiboLabel
    func setUpnewWeiboLabel(count:Int)
    {
        //print("产生了\(count)条新数据")
        //当newWeiboLabel未隐藏时，停止刷新
        if self.newWeiboLabel.hidden == false
        {
            return
        }
        
        self.newWeiboLabel.hidden = false
        
        if count == 0
        {
            self.newWeiboLabel.text = "没有产生新数据"
        }
        else
        {
            self.newWeiboLabel.text = "产生了\(count)条新数据"
        }
        
        //设置向下的动画
        UIView.animateWithDuration(0.5, animations: {
            
            //newWeiboLabel向下运动了一段距离
            self.newWeiboLabel.transform = CGAffineTransformMakeTranslation(0,30)
            
            }) { (_) in
                
                UIView.animateWithDuration(0.5, delay: 1, options: [], animations: {
                    
                    //返回到原处
                    self.newWeiboLabel.transform = CGAffineTransformIdentity
                    
                    }, completion: { (_) in
                        
                        //隐藏
                        self.newWeiboLabel.hidden = true
                })
                
            }
        
    }
    
    
    // 停止各种动画
    func endRefreshing()
    {
        self.indicatorView.stopAnimating()
        self.refreshControl.endRefreshing()
    }
    
}

//在扩展中实现tableView的数据源方法
extension HomeController:UITableViewDataSource
{
    //(1)组
    func numberOfSectionsInTableView(tableView: UITableView) -> Int
    {
        return 1
    }
    
    //(2)行
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return self.homeViewModel.dataArray.count
    }
    
    //(3)行内容
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("homeCell", forIndexPath: indexPath) as! HomeCell
        
        
        cell.viewModel = self.homeViewModel.dataArray[indexPath.row]
        
        return cell
        
    }
    
}

//在扩展中实现tableView的代理方法
extension HomeController:UITableViewDelegate
{
    //(1)代理方法:tableView将会显示哪一个cell
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
    {
    
        // 如果判断当前显示的是最后一个cell 的时候 才可以叫菊花转 且 当前菊花没有开始动画
        if indexPath.row == self.homeViewModel.dataArray.count - 1 && !self.indicatorView.isAnimating()
        {
            //菊花开始转动
            self.indicatorView.startAnimating()
            
            //重新从网络上获取相关数据
            GetHomeData()
        }
    }
}


